package 剑指II;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-11-04
 **/

public class Jz018有效的回文 {

    /**
     * 给定一个字符串 s ，验证 s 是否是 回文串 ，只考虑字母和数字字符，可以忽略字母的大小写。
     * <p>
     * 本题中，将空字符串定义为有效的 回文串 。
     * 示例 1:
     * 输入: s = "A man, a plan, a canal: Panama"
     * 输出: true
     * 解释："amanaplanacanalpanama" 是回文串
     * 示例 2:
     * 输入: s = "race a car"
     * 输出: false
     * 解释："raceacar" 不是回文串
     *  
     * 提示：
     * 1 <= s.length <= 2 * 105
     * 字符串 s 由 ASCII 字符组成
     */

    public boolean isPalindrome(String s) {

        int left = 0;
        int right = s.length() - 1;
        char[] arr = s.toCharArray();

        while (left <= right) {
            char lC = arr[left];
            char rC = arr[right];
            if (!Character.isLetterOrDigit(lC)) {
                left++;
                continue;
            }
            if (!Character.isLetterOrDigit(rC)) {
                right--;
                continue;
            }
            if (Character.toLowerCase(lC) != Character.toLowerCase(rC)) {
                return false;
            }
            left++;
            right--;
        }

        return true;
    }

    public static void main(String[] args) {
        Jz018有效的回文 n = new Jz018有效的回文();
        boolean result = n.isPalindrome("A man, a plan, a canal: Panama");
        System.out.println(result);
    }

}
